package com.labManage.vo;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.ToString;

import java.io.Serializable;
import java.util.List;
@ToString
public class ResultVo implements Serializable {
    private static final long serialVersionUID = 1L;

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    // 响应业务状态
    /*
     * 200	成功
     * 201	错误
     * 400	参数错误
     */
    private Integer count;
    private Integer code;

    // 响应消息
    private String msg;

    // 响应中的数据
    private Object data;

    public ResultVo(Integer count, Integer code, String msg, Object data) {
        this.count = count;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public ResultVo(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public ResultVo(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public static  ResultVo build(Integer count, Integer code, String msg, Object data){
        return new ResultVo(count, code,msg,data);
    }
    public static  ResultVo build(Integer code, String msg, Object data){
        return new ResultVo(code,msg,data);
    }
    public static  ResultVo build(Integer code, String msg){
        return new ResultVo(code,msg);
    }
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public static ObjectMapper getMAPPER() {
        return MAPPER;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }


    /**
     * 将json结果集转化为SysResult对象
     *
     * @param jsonData json数据
     * @param clazz SysResult中的object类型
     * @return
     */
//    public static ResultVo formatToPojo(String jsonData, Class<?> clazz) {
//        try {
//            if (clazz == null) {
//                return MAPPER.readValue(jsonData, ResultVo.class);
//            }
//            JsonNode jsonNode = MAPPER.readTree(jsonData);
//            JsonNode data = jsonNode.get("data");
//            Object obj = null;
//            if (clazz != null) {
//                if (data.isObject()) {
//                    obj = MAPPER.readValue(data.traverse(), clazz);
//                } else if (data.isTextual()) {
//                    obj = MAPPER.readValue(data.asText(), clazz);
//                }
//            }
//            return build(jsonNode.get("code").intValue(), jsonNode.get("msg").asText(), obj);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//    }
//
//    /**
//     * 没有object对象的转化
//     *
//     * @param json
//     * @return
//     */
//    public static ResultVo format(String json) {
//        try {
//            return MAPPER.readValue(json, ResultVo.class);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * Object是集合转化
//     *
//     * @param jsonData json数据
//     * @param clazz 集合中的类型
//     * @return
//     */
//    public static ResultVo formatToList(String jsonData, Class<?> clazz) {
//        try {
//            JsonNode jsonNode = MAPPER.readTree(jsonData);
//            JsonNode data = jsonNode.get("data");
//            Object obj = null;
//            if (data.isArray() && data.size() > 0) {
//                obj = MAPPER.readValue(data.traverse(),
//                        MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
//            }
//            return build(jsonNode.get("code").intValue(), jsonNode.get("msg").asText(), obj);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//    }

}
